#  BaseHTTPRequestHandler：处理HTTP请求；HTTPServer：提供HTTP服务
from http.server import BaseHTTPRequestHandler, HTTPServer

# 定义类HelloWorldHandler，并继承于BaseHTTPRequestHandler
class HelloWorldHandler(BaseHTTPRequestHandler):
    # 处理GET请求，HTTP支持的请求方法一般为：GET POST PUT PATCH DELETE OPTIONS
    def do_GET(self):
        # HTTP 状态码 200 ，表示服务端成功处理请求
        self.send_response(200) 
        # text/html 表明响应体的内容一般的HTML代码（不是CSS\JS\图片等），浏览器接收到此头信息后，会把主体内容做为html来解析
        # utf-8 声明请求体的编码格式，浏览器依此对响应体进行解码
        # 当前的浏览器默认以utf-8进行解码，所以也可以不指定编码
        self.send_header("Content-type", "text/html; charset=utf-8")
        # 由于http协议的响应行、响应头、响应体是按顺序出现的，此行代码表示不在输出响应头（即后面应该输出响应体了）
        self.end_headers()
        
        # 返回个Hello World!给浏览器
        html_content = """
        <!DOCTYPE html>
        <html>
        <head>
            <title>Helllo World by http</title>
        </head>
        <body>
            <h1 style="text-align: center">Hello World!</h1>
        </body>
        </html>`
        """
        # 写入响应体
        # 注意这里的encode中指定的编码类型必须与send_header中声明的编码一致
        # 如果不一致的话，浏览器便没有办法对响应体进行解码
        self.wfile.write(html_content.encode("utf-8"))

if __name__ == "__main__":
    # 监听所有 IP，端口 80
    server_address = ("0.0.0.0", 80)
    # 创建http服务对象，当有请求发生时交给 HelloWorldHandler 来处理
    httpd = HTTPServer(server_address, HelloWorldHandler)
    print("Web 服务已启动：http://localhost")
    # 启动HTTP服务
    httpd.serve_forever()